Skip to content

Instantly share code, notes, and snippets.

@kejun
Created August 15, 2012 09:23
Show Gist options
  • Star 13 You must be signed in to star a gist
  • Fork 5 You must be signed in to fork a gist
  • Save kejun/3358036 to your computer and use it in GitHub Desktop.
Save kejun/3358036 to your computer and use it in GitHub Desktop.
ios/android兼容mouse事件
;(function($){
$.support.touch = 'ontouchend' in document;
if (!$.support.touch) {
return;
}
var eventMap = {
click: 'touchend',
mousedown: 'touchstart',
mouseup: 'touchend',
mousemove: 'touchmove'
};
var simulateEvent = function(eventType) {
$.event.special[eventType] = {
setup: function() {
var el = $(this);
el.bind(eventMap[eventType], $.event.special[eventType].handler);
if (this.nodeName === 'A' && eventType === 'click') {
this.addEventListener('click', function(e){ e.preventDefault(); }, false);
}
},
teardown: function() {
$(this).unbind(eventMap[eventType], $.event.special[eventType].handler);
},
handler: function(e) {
var touch = e.originalEvent.changedTouches[0];
e.type = eventType;
e.pageX = touch.pageX;
e.pageY = touch.pageY;
e.clientX = touch.clientX;
e.clientY = touch.clientY;
$.event.handle.call(this, e);
}
};
};
$.fn.delegate = function(selector, types, data, fn) {
var params = data;
if (typeof data === 'function') {
fn = data;
params = null;
}
var handler = function(e) {
if (this.nodeName === 'A' && e.type === 'click') {
this.addEventListener('click', function(e){ e.preventDefault(); }, false);
}
fn.apply(this, arguments);
};
return this.live(types, params, handler, selector);
};
$.each(['click', 'mousedown', 'mousemove', 'mouseup'],
function(i, name) {
simulateEvent(name);
});
})(jQuery);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment